home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0257 / doc.exe / DOSIO.DOC < prev    next >
Text File  |  1992-02-15  |  13KB  |  334 lines

  1.   ─────────────────────────────────────────────────────────────────────────────
  2.   Dokumentation zur Datei: DOSIO.INC
  3.  
  4.   ─────────────────────────────────────────────────────────────────────────────
  5.    
  6.     DOSIO.INC    - Routinen zum Lesen und Schreiben von Zeichen und
  7.                    Strings von der Standard-Eingabe bzw. auf die
  8.                    Standard-Ausgabe (oder anderen Geräten bzw. Dateien)
  9.                    über die DOS-Funktionen zur Dateibearbeitung mit
  10.                    Handles.
  11.                    (für den Assembler A86)
  12.    
  13.                    (c) Bernd Schemmer 1990 - 1992
  14.                    Letzter Update: 14.02.1992
  15.    
  16.    
  17.     ■ Variablen:
  18.     ------------
  19.     InputHandle
  20.    
  21.          Wort, Handle für die Routinen zum Lesen.
  22.          Normalerweise enthält dieses Wort den Wert 0 (für STDIn),
  23.          durch Ändern des Wertes können die Routinen aber auch
  24.          zum Lesen aus einer Datei oder von einem Gerät benutzt
  25.          werden.
  26.    
  27.     OutputHandle
  28.    
  29.          Wort, Handle für die Routinen zum Schreiben.
  30.          Normalerweise enthält dieses Wort den Wert 1 (für STDOut),
  31.          durch Ändern des Wertes können die Routinen aber auch
  32.          zum Schreiben in eine Datei oder auf ein Gerät (z.B. in den
  33.          Error-Kanal) benutzt werden.
  34.    
  35.    
  36.     ■ Routinen:
  37.     -----------
  38.     DOSReadStr            - Liest einen String
  39.     DOSReadChar           - Liest ein Zeichen
  40.     DOSWriteChar          - Schreibt ein Zeichen
  41.     DOSWritelnChar        - Schreibt ein Zeichen mit Zeilenvorschub
  42.     DOSWriteStr           - Schreibt einen String
  43.     DOSWritelnStr         - Schreibt einen String mit Zeilenvorschub
  44.    
  45.     DOSCheckOutput        - Überprüft, ob noch Zeichen ausgegeben werden
  46.                             können
  47.     DOSCheckInput         - Überprüft, ob noch Zeichen zur Verfügung stehen
  48.    
  49.     DOSCheckSTDOut        - Überprüft, ob die Ausgabe auf ein Gerät oder
  50.                             in eine Datei geht
  51.     DOSCheckSTDIn         - Überprüft, ob die Eingabe von einem Gerät oder
  52.                             aus einer Datei kommt
  53.     DOSCheckHandle        - Überprüft, ob ein Handle für eine Datei oder
  54.                             für ein Gerät benutzt wird
  55.     DOSSetHandleMode      - Setzt den Cooked- oder Raw-Modus für ein Gerät
  56.    
  57.    
  58.    
  59.     ■ EQU-Anweisungen für die Standard-Ein/Ausgabe-Kanäle
  60.    
  61.     STDIn     EQU  0
  62.     STDOut    EQU  1
  63.     STDErr    EQU  2
  64.     STDAux    EQU  3
  65.     STDPrint  EQU  4
  66.    
  67.    
  68.     ----------------------------
  69.     DOSCheckSTDIn
  70.    
  71.     Funktion: Ermittelt, ob das von den Routinen zum Lesen von
  72.               Zeichen und Strings benutzte Handle für eine
  73.               Datei oder für ein Gerät benutzt wird.
  74.    
  75.     Eingabe:  [cs:InputHandle]
  76.    
  77.     Ausgabe:  CF = 0 ->> okay
  78.                          ZF = 1 ->> Eingabe kommt aus einer Datei
  79.                          ZF = 0 ->> Eingabe kommt von einem Gerät
  80.                          BX = InputHandle
  81.                          DX = Attribute des Handles
  82.                               Aufbau: siehe DOSCheckHandle
  83.               CF = 1 ->> Fehler
  84.                          AX = DOS-Fehlernummer
  85.    
  86.    
  87.     ----------------------------
  88.     DOSCheckSTDOut
  89.    
  90.     Funktion: Ermittelt, ob das von den Routinen zum Schreiben von
  91.               Zeichen und Strings benutzte Handle für eine Datei
  92.               oder für ein Gerät benutzt wird.
  93.    
  94.     Eingabe:  [cs:OutputHandle]
  95.    
  96.     Ausgabe:  CF = 0 ->> okay
  97.                          ZF = 1 ->> Ausgabe geht in eine Datei
  98.                          ZF = 0 ->> Ausgabe geht auf ein Gerät
  99.                          BX = OutputHandle
  100.                          DX = Attribute des Handles
  101.                               Aufbau: siehe DOSCheckHandle
  102.               CF = 1 ->> Fehler
  103.                          AX = DOS-Fehlernummer
  104.    
  105.     ----------------------------
  106.     DOSCheckHandle
  107.    
  108.     Funktion: Ermittelt, ob ein Handle für ein Gerät oder für
  109.               eine Datei benutzt wird
  110.    
  111.     Eingabe:  BX = Handle einer offenen Datei oder eines geöffneten
  112.                    Geräts
  113.    
  114.     Ausgabe:  CF = 0 ->> okay
  115.                          ZF = 1 ->> Handle steht für eine Datei
  116.                          ZF = 0 ->> Handle steht für ein Gerät
  117.                          DX = Attribute des Handles
  118.               CF = 1 ->> Fehler
  119.                          AX = DOS-Fehlernummer
  120.    
  121.     ■ Aufbau des Attributes:
  122.    
  123.     Bit    | Bedeutung für Dateien
  124.     -------+------------------------------------------------------------
  125.     0 - 5  | Nummer des logischen Laufwerkes auf dem sich die Datei
  126.            | befindet (0 = A:, 1 = B:, usw.)
  127.       6    | falls 1: in die Datei wurde noch nicht geschrieben
  128.            | falls 0: in die Datei wurde schon geschrieben
  129.       7    | für Dateien immer 0
  130.     8 - 13 | nicht benutzt, sollten 0 sein
  131.      15    | für Dateien immer 0
  132.            |
  133.    
  134.     Bit    | Bedeutung für Geräe
  135.     -------+------------------------------------------------------------
  136.       0    | falls 1: Gerät ist die Standard-Eingabe
  137.       1    | falls 1: Gerät ist die Standard-Ausgabe
  138.       2    | falls 1: Gerät ist das NUL-Device
  139.       3    | falls 1: Gerät ist das CLOCK$-Device
  140.       4    | falls 1: Das Gerät verwendet den Interrupt 29h für die
  141.            |          Zeichenausgabe
  142.       5    | falls 1: Das Gerät wird im Raw-Modus betrieben, d.h. DOS
  143.            |          führt keinerlei Interpretation von Zeichen durch
  144.            | falls 0: Das Gerät wird im Cooked-Modus betrieben, d.h. die
  145.            |          Zeichen CTRL-Z, CTRL-C, CTRL-P und RETURN werden
  146.            |          von DOS interpretiert
  147.       6    | falls 1: das Gerät kann Daten liefern
  148.            | falls 0: das Gerät liefert bei Leseversuchen nur EOF
  149.       7    | für Geräte immer 1
  150.       8    | unbekannt
  151.       9    | unbenutzt
  152.      10    | unbenutzt
  153.      11    | falls 1: der Treiber unterstützt die Funktionen Open und Close
  154.      12    | falls 1: das Gerät wird über ein Netzwerk betrieben
  155.      13    | falls 1: das Gerät unterstützt 'Output until busy'
  156.      14    | falls 1: das Gerät unterstützt die IOCTL-Funktionen
  157.            |          4402h und 4403h
  158.      15    | für Geräte immer 1
  159.            |
  160.    
  161.     ----------------------------
  162.     DOSSetHandleMode
  163.    
  164.     Funktion: Verändern des Modus eines Handles (Cooked- oder Raw-Modus)
  165.    
  166.     Eingabe:  BX = Handle
  167.               AL = 0 ->> Cooked-Modus setzen
  168.               AL = 1 ->> Raw-Modus setzen
  169.    
  170.     Ausgabe:  CF = 0 ->> okay
  171.               CF = 1 ->> Fehler
  172.                          AX = DOS-Fehlernummer
  173.    
  174.     Bes.:     Der Modus kann nur für Geräte geändert werden, für Dateien
  175.               wird immer die DOS-Fehlernummer 1 zurück geliefert.
  176.               Jedes zeichenorientierte Gerät (auch der Drucker!) wird von
  177.               DOS im Cooked-Modus (d.h. mit Interpretation der Zeichen
  178.               durch DOS) eröffnet.
  179.    
  180.               Falls die Standard-Eingabe im Cooked-Modus betrieben wird,
  181.               gibt DOS jedes gelesene Zeichen sofort auf die Standard-
  182.               Ausgabe aus und interpretiert (u.a.) die Taste RETURN
  183.               als Ende der Eingabe (->> die angeforderte Anzahl Zeichen
  184.               ist nur ein Maximal-Wert).
  185.    
  186.               Falls die Standard-Eingabe im Raw-Modus betrieben wird,
  187.               gibt DOS die gelesenen Zeichen NICHT auf die Standard-
  188.               Ausgabe auf und wartet grundsätzlich so lange, bis die
  189.               angeforderte Anzahl Zeichen gelesen wurden (->> die
  190.               angeforderte Anzahl Zeichen muß eingegeben werden).
  191.    
  192.               Achtung: Falls der Modus der immer offenen Handles
  193.                        (STDin, STDOut, STDErr, STDPrint und STDAux)
  194.                        geändert wird, sollte er vor dem Programmende
  195.                        vom Programm auf den ursprünglichen Wert
  196.                        gesetzt werden, da DOS diesen Wert NICHT
  197.                        restauriert.
  198.    
  199.     ----------------------------
  200.     DOSCheckOutput
  201.    
  202.     Funktion: Überprüft, ob noch Zeichen ausgegeben werden können
  203.    
  204.     Eingabe:  [cs:OutputHandle]
  205.    
  206.     Ausgabe:  CF = 0 ->> okay
  207.                          ZF = 1 ->> keine Zeichen mehr ausgebbar
  208.                          ZF = 0 ->> noch Zeichen ausgebbar
  209.               CF = 1 ->> Fehler
  210.                          AX = DOS-Fehlernummer
  211.    
  212.     Bes.:     Die Routine liefert für Dateien IMMER den Status 'noch
  213.               Zeichen ausgebbar'.
  214.    
  215.     ----------------------------
  216.     DOSCheckInput
  217.    
  218.     Funktion: Testet, ob noch Zeichen verfügbar sind
  219.    
  220.     Eingabe:  [cs:InputHandle]
  221.    
  222.     Ausgabe:  CF = 0 ->> okay
  223.                          ZF = 1 ->> kein Zeichen mehr verfügbar
  224.                          ZF = 0 ->> noch Zeichen verfügbar
  225.               CF = 1 ->> Fehler
  226.                          AX = DOS-Fehlernummer
  227.    
  228.     Bes.:     Benutzt die undokumentierte Funktion 52h und den
  229.               undokumentierten DIB (falls das Handle für die
  230.               Standard-Eingabe verwendet wird, da die Routine
  231.               auch den DOS-internen Puffer für die Standard-
  232.               Eingabe überprüft).
  233.    
  234.     ----------------------------
  235.     DOSReadStr
  236.    
  237.     Funktion:  Lesen eines Strings (mit Längenzähler)
  238.    
  239.     Eingabe:   DS:SI -> Puffer für den String
  240.                CL = max. Länge für den String
  241.                [cs:InputHandle]
  242.    
  243.     Ausgabe:   CF = 0 ->> String ist im Puffer
  244.                           AL = Länge des gelesenen Strings
  245.                CF = 1 ->> Fehler
  246.                           AX = DOS-Fehlernummer
  247.    
  248.     Bes.:      Die wirkliche Anzahl gelesener Zeichen kann der Länge
  249.                des zurückgelieferten Strings entnommen werden.
  250.                Falls diese auf 0 steht, war kein Zeichen verfügbar.
  251.                CR und LF werden nur am Ende des eingegebenen Strings
  252.                überlesen, d.h. falls die Eingabe aus einer Datei kommt,
  253.                können durchaus mehrere durch CR/LF getrennte Zeilen auf
  254.                einmal gelesen werden!
  255.                Siehe auch Bemerkungen zu 'DOSSetHandleMode'
  256.    
  257.     ----------------------------
  258.     DOSWritelnStr
  259.    
  260.     Funktion:  Schreiben eines Strings mit Zeilenvorschub
  261.    
  262.     Eingabe:   DS:SI -> auszugebender String
  263.                [cs:OutputHandle]
  264.    
  265.     Ausgabe:   CF = 0 ->> ZF = 1 ->> okay
  266.                           ZF = 0 ->> es konnten nicht alle Zeichen
  267.                                      geschrieben werden. Die Anzahl
  268.                                      der geschriebenen Bytes steht
  269.                                      im Register AX.
  270.                CF = 1 ->> Fehler
  271.                           AX = DOS-Fehlernummer
  272.    
  273.     ----------------------------
  274.     DOSWriteStr
  275.    
  276.     Funktion:  Schreiben eines Strings
  277.    
  278.     Eingabe:   DS:SI -> auszugebender String
  279.                [cs:OutputHandle]
  280.    
  281.     Ausgabe:   CF = 0 ->> ZF = 1 ->> okay
  282.                           ZF = 0 ->> es konnten nicht alle Zeichen
  283.                                      geschrieben werden. Die Anzahl
  284.                                      der geschriebenen Bytes steht
  285.                                      im Register AX.
  286.                CF = 1 ->> Fehler
  287.                           AX = DOS-Fehlernummer
  288.    
  289.     ----------------------------
  290.     DOSReadChar
  291.    
  292.     Funktion:  Lesen eines Zeichens
  293.    
  294.     Eingabe:   [cs:InputHandle]
  295.    
  296.     Ausgabe:   CF = 0 ->> okay
  297.                           AL = 0 ->> kein Zeichen verfügbar
  298.                           sonst: AL = Zeichen
  299.                CF = 1 ->> Fehler
  300.                           AX = DOS-Fehlernummer
  301.    
  302.     Bes.:      Siehe auch Bemerkungen zu 'DOSSetHandleMode'
  303.    
  304.     ----------------------------
  305.     DOSWriteChar
  306.    
  307.     Funktion:  Schreiben eines Zeichens
  308.    
  309.     Eingabe:   AL = Zeichen
  310.                [cs:OutputHandle]
  311.    
  312.     Ausgabe:   CF = 0 ->> okay
  313.                           ZF = 1 ->> Zeichen geschrieben
  314.                           ZF = 0 ->> Zeichen konnte nicht
  315.                                      geschrieben werden
  316.                CF = 1 ->> Fehler
  317.                           AX = DOS-Fehlernummer
  318.    
  319.     ----------------------------
  320.     DOSWriteLnChar
  321.    
  322.     Funktion:  Schreiben eines Zeichens mit Zeilenvorschub
  323.    
  324.     Eingabe:   AL = Zeichen
  325.                [cs:OutputHandle]
  326.    
  327.     Ausgabe:   CF = 0 ->> okay
  328.                           ZF = 1 ->> Zeichen geschrieben
  329.                           ZF = 0 ->> Zeichen konnte nicht
  330.                                      geschrieben werden
  331.                CF = 1 ->> Fehler
  332.                           AX = DOS-Fehlernummer
  333.    
  334.